package controlador;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modelo.dominio.Factura;
import modelo.dominio.Pago;
import modelo.servicio.Clientes;
import modelo.servicio.Facturas;
import modelo.servicio.Pagos;
import modelo.util.Formateador;
import modelo.util.Seguridad;

public class FacturaControlador extends HttpServlet {

    private String html;

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=ISO-8859-1");
        PrintWriter out = response.getWriter();
        String accion = request.getParameter("ac") == null ? "" : request.getParameter("ac");
        html = "";
        try {
            if (accion.equals("ls")) {
                String cia = request.getSession().getAttribute("sCompania").toString();
                String cliente = request.getParameter("cmb_cliente") == null ? "" : request.getParameter("cmb_cliente");
                List<Factura> facturas = Facturas.instancia().obtener(cia, cliente);
                //if (!facturas.isEmpty()) {
                    request.setAttribute("facturas", facturas);
                    request.setAttribute("clt", cliente);
                    getServletContext().getRequestDispatcher("/front?v=1&ac=2").forward(request, response);
                //} else {
                    //out.println("<br/>El cliente " + cliente + " no tiene pagos pendientes con " + cia);
                //}
            } else if (accion.equals("fa")) {
                String[] seleccionados = request.getParameterValues("ckb_pagar");
                String comentarios = request.getParameter("txa_comentarios");
                String cliente = request.getParameter("hid_cliente");
                String importeTotal = request.getParameter("txt_total");
                double anticipo = request.getParameter("txt_anticipo")==null 
                        || request.getParameter("txt_anticipo").equals("") ? 0
                        : Double.parseDouble(request.getParameter("txt_anticipo"));
                String docSeleccionados = "|";
                if (seleccionados != null) {
                    for (int i = 0; i < seleccionados.length; i++) {
                        docSeleccionados += seleccionados[i] + "|";
                    }
                }
                docSeleccionados += "ANTI;;"+anticipo+"|";
                String folioInternet = Facturas.instancia().procesarPago(Integer.parseInt(cliente), docSeleccionados, comentarios, request.getSession().getAttribute("sCompania").toString());
                request.setAttribute("folioInternet", folioInternet);
                if (folioInternet != null && !folioInternet.equals("") && folioInternet.indexOf("-") >= 0) {
                    String serie = folioInternet.substring(0, folioInternet.indexOf("-"));
                    String numeroFactura = folioInternet.substring(folioInternet.indexOf("-") + 1, folioInternet.length());
                    String t_importe = Formateador.moneda(importeTotal, false);
                    String s_transm = Formateador.agregado(numeroFactura, "0", 20, true);
                    String c_referencia = Formateador.agregado(cliente, "0", 20, true);
                    String val_1 = "1";
                    String val_2 = Clientes.instancia().obtener(Integer.parseInt(cliente)).getRazonSocial();
                    String val_13 = Seguridad.encriptar(s_transm + c_referencia + t_importe);
                    String cia = request.getSession().getAttribute("sCompania").toString();
                    if (cia.equalsIgnoreCase("CTE")) {
                        val_1 = "2";
                    }
                    request.setAttribute("txt_user", request.getSession().getAttribute("sNombre").toString());
                    request.setAttribute("txt_cia", modelo.servicio.Companias.instancia().obtener(cia).getNombre());
                    request.setAttribute("s_transm", s_transm);
                    request.setAttribute("c_referencia", c_referencia);
                    request.setAttribute("t_importe", t_importe);
                    request.setAttribute("val_1", val_1);
                    request.setAttribute("val_2", val_2);
                    request.setAttribute("val_13", val_13);
                    List<Pago> pagos = Pagos.instancia().obtener(serie, Integer.parseInt(numeroFactura));
                    request.setAttribute("pagos", pagos);
                    request.getRequestDispatcher("/front?v=2&ac=3").forward(request, response);
                } else {
                    out.println(folioInternet + "\" Existio un Error al Insertar en la BD. Consulte al Administrador");
                }
            }
        } catch (Exception ex) {
            out.println(ex.getMessage());
        } finally {
            out.close();
        }
    }

// <editor-fold defaultstate="collapsed" desc="Metodos HttpServlet. Click en el signo + izquierdo para editar el codigo.">
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
// </editor-fold>
}
